﻿namespace WopiHost.Core;

/// <summary>
/// WOPI HTTP header names.
/// </summary>
public static class WopiHeaders
{
    /// <summary>
    /// 指定来自WOPI服务器的请求操作的字符串。
    /// </summary>
    public const string WOPI_OVERRIDE = "X-WOPI-Override";

    /// <summary>
    /// 标识文件当前锁定状态的字符串值。在以409 Conflict响应请求时必须包含此头部。在以200 OK响应请求时不应包含此头部。
    /// </summary>
    public const string LOCK = "X-WOPI-Lock";

    /// <summary>
    /// WOPI客户端提供的表示文件现有锁定状态的字符串。必需的。请注意，如果未提供X-WOPI-OldLock，则该请求与Lock请求相同。
    /// </summary>
    public const string OLD_LOCK = "X-WOPI-OldLock";

    /// <summary>
    /// 可选的字符串值，指示锁定失败的原因。在以409 Conflict响应请求时可能包含此头部。此字符串的格式没有标准，仅用于记录目的。
    /// </summary>
    public const string LOCK_FAILURE_REASON = "X-WOPI-LockFailureReason";

    /// <summary>
    /// 表示文件当前被其他客户端锁定的字符串。此头部应仅在以409状态码响应时包含。
    /// 注意：此头部已弃用，WOPI客户端应忽略它。
    /// </summary>
    public const string LOCKED_BY_OTHER_INTERFACE = "X-WOPI-LockedByOtherInterface";

    /// <summary>
    /// 指定文件扩展名或完整文件名的UTF-7字符串。如果仅提供扩展名，则应结合初始文件的不带扩展名的名称和扩展名，以创建建议的名称。WOPI服务器必须根据需要修改建议的名称，以创建一个既符合法律命名要求又不覆盖任何现有文件的新文件，同时保留文件扩展名。如果未提供X-WOPI-RelativeTarget，则必须存在此头部。
    /// </summary>
    public const string SUGGESTED_TARGET = "X-WOPI-SuggestedTarget";

    /// <summary>
    /// 指定完整文件名的UTF-7字符串。WOPI服务器不得修改以满足请求。当指定名称的文件已存在时，如果X-WOPI-OverwriteRelativeTarget请求头部设置为false，或者X-WOPI-OverwriteRelativeTarget请求头部设置为true且文件已锁定，则主机必须以409状态码响应。
    /// </summary>
    public const string RELATIVE_TARGET = "X-WOPI-RelativeTarget";

    /// <summary>
    /// 指定主机是否必须覆盖文件名的布尔值。
    /// </summary>
    public const string OVERWRITE_RELATIVE_TARGET = "X-WOPI-OverwriteRelativeTarget";

    /// <summary>
    /// Office for the web对主机进行的每个WOPI请求都将具有称为相关ID的ID。该ID将在WOPI请求中使用X-WOPI-CorrelationId请求头部包含。
    /// </summary>
    public const string CORRELATION_ID = "X-WOPI-CorrelationID";

    /// <summary>
    /// 每当导航到动作URL时，Office for the web将创建一个唯一的会话ID。此会话ID允许Microsoft工程师快速检索与该会话相关的所有服务器日志，包括关于发送到主机的WOPI调用的信息。会话ID将在WOPI动作URL的HTTP响应中作为X-UserSessionId响应头部返回。它还将在浏览器随后对Office Online的所有请求中作为X-UserSessionId请求头部传递，并且它将包含在所有从|wac|发送到主机页面的PostMessage中的wdUserSession值中。
    /// </summary>
    public const string SESSION_ID = "X-UserSessionId";

    /// <summary>
    /// 指定请求文件的预期大小上限的整数值。可选的。如果请求中未设置此值，主机应使用4字节整数的最大值。如果请求的文件大于此值，主机必须以412 Precondition Failed状态码响应。
    /// </summary>
    public const string MAX_EXPECTED_SIZE = "X-WOPI-MaxExpectedSize";

    /// <summary>
    /// 文件或容器的WopiSrc（一个字符串）。用于：
    /// POST /wopibootstrapper
    /// </summary>
    public const string WOPI_SRC = "X-WOPI-WopiSrc";

    /// <summary>
    /// 字符串GET_NEW_ACCESS_TOKEN。必需的。
    /// </summary>
    public const string ECOSYSTEM_OPERATION = "X-WOPI-EcosystemOperation";
}
